﻿using Microsoft.EntityFrameworkCore;
using TuLing.Blazor.Dto;
using TulingMember.Core;

namespace TuLing.Blazor.Services
{
    public class ProductUnitService: BaseService
    {
        public ProductUnitService(DefaultDbContext context) : base(context) { }

        public List<Unit> Search(BaseInput input)
        {
            if (!string.IsNullOrEmpty(input.keyword))
            {
                return _context.Units.Where(m => EF.Functions.Like(m.Name, $"%{input.keyword}%")).OrderBy(m => m.Id).ToList();
            }
            return _context.Units.ToList();
        }

        public Unit Save(Unit input)
        {
            var isExist = _context.Units.Any(m => EF.Functions.Like(m.Name, input.Name) && m.Id != input.Id);
            if (isExist)
            {
                throw new Exception("产品单位已经存在了。");
            }

            if (input.Id > 0)
            {
                var unit1 = _context.Units.First(m => m.Id == input.Id);
                unit1.Name = input.Name;
                _context.Units.Update(unit1);
                _context.SaveChanges();

                Unit unit2 = _context.Units.OrderBy(s => s.Id).Last();
                return unit2;
            }
            else
            {
                _context.Units.Add(input);
                _context.SaveChanges();
                Unit unit = _context.Units.OrderBy(s => s.Id).Last();
                return unit;
            }

        }

        public void Delete(long id)
        {
            var unit = _context.Units.FirstOrDefault(m => m.Id == id);
            if (unit == null)
            {
                throw new Exception("产品单位不存在。");
            }
            _context.Units.Remove(unit);
            _context.SaveChanges();
        }
    }
}
